package jp.seraph.jsade.model;

import jp.seraph.jsade.math.Angle;

/**
 * 各オブジェクトに接続されているジョイントを表すインターフェース
 * 
 * 
 */
public interface Joint extends ModelObject, CoordinateSystem {
    /**
     * ジョイントの識別子を取得する
     * 
     * @return
     */
    public JointIdentifier getIdentifier();

    /**
     * ジョイントの名前を取得する。
     * 
     * @return
     */
    public String getName();

    /**
     * ジョイントに子として接続されているモデルオブジェクトを取得する
     * 
     * @return
     */
    public ModelPart getObject();

    /**
     * ジョイントの親として接続されているモデルオブジェクトを取得する
     * 
     * @return
     */
    public ModelPart getParentObject();

    /**
     * ジョイントの最大角度を取得します
     * 
     * @return ジョイントの最大角度[°]
     */
    public Angle getMaxAngle();

    /**
     * ジョイントの最小角度を取得します。
     * 
     * @return ジョイントの最小角度[°]
     */
    public Angle getMinAngle();

    /**
     * ジョイントの現在の角度を取得します。 この角度は、親オブジェクト座標系とこのジョイントの座標系の角度差です。
     * 
     * @return ジョイントの角度[°]
     */
    public Angle getAngle();

    /**
     * ジョイントの角度を設定します。 この角度は、親オブジェクト座標系と、このジョイントの座標系の角度差です。
     * 
     * @param aAngle
     *            ジョイントの角度[°]
     */
    public void setAngle(Angle aAngle);
}
